//package com.vast.admin.service.impl;
//
//import cn.hutool.core.date.DateTime;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.vast.admin.entity.Dept;
//import com.vast.common.core.domain.entity.SysUser;
//import com.vast.admin.mapper.DeptMapper;
//import com.vast.admin.service.DeptService;
//import com.vast.system.core.constant.UserConstants;
//import com.vast.system.core.domain.AdminTreeSelect;
//import com.vast.system.utils.Constant;
//import com.vast.system.utils.StringUtils;
//import org.springframework.stereotype.Service;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Iterator;
//import java.util.List;
//import java.util.stream.Collectors;
//@Service
//public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService{
//
//    @Override
//    public IPage<Dept>  queryDeptTree(SysUser manager, Page<Dept> page) {
//        page.setSize(-1);
//        //获取一级
//        QueryWrapper<Dept> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq(Dept.COL_PARENT_ID, 0);
//        queryWrapper.orderByAsc(Dept.COL_CREATE_TIME);
//
//        if (!Arrays.asList(manager.getRoleIdList()).contains(Constant.SUPER_ADMIN)) {//超级管理员
//            queryWrapper.eq(Dept.COL_COMPANY_ID, manager.getCompanyId());
//        }
//
//        IPage<Dept> parentDepts = baseMapper.selectPage(page, queryWrapper);
//        for (Dept dept : parentDepts.getRecords()) {
//            dept.setChildren(getNextLevelNode(dept));
//            if(dept.getChildren().size() > 0){
//                dept.setHasChildren(true);
//            }
//        }
//        return parentDepts;
//    }
//
//    /**
//     * @param dept
//     * @return
//     */
//    private List<Dept> getNextLevelNode(Dept dept) {
//        QueryWrapper<Dept> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq(Dept.COL_PARENT_ID, dept.getId());
//        queryWrapper.orderByAsc(Dept.COL_SORT);
//        List<Dept> levelMenus = baseMapper.selectList(queryWrapper);
//        for (Dept sonMenu : levelMenus) {
//            sonMenu.setChildren(getNextLevelNode(sonMenu));
//            if(sonMenu.getChildren().size() > 0){
//                sonMenu.setHasChildren(true);
//            }
//        }
//        return levelMenus;
//    }
//
//    @Override
//    public boolean addOrUpdate(SysUser manager, Dept bean) {
//        if (bean.getId() == null) {
//           if(bean.getParentId() == 0L){
//               Dept parentDept = baseMapper.selectById(bean.getParentId());
//               if(parentDept != null){
//                   bean.setCompanyId(parentDept.getCompanyId());
//                   bean.setAncestors(parentDept.getAncestors()+parentDept.getId()+",");
//                   bean.setParentName(parentDept.getName());
//               }else{
//                   bean.setCompanyId(manager.getCompanyId());
//               }
//           }
//            bean.setCreateBy(manager.getUserId());
//            bean.setUpdateBy(manager.getUserId());
//            bean.setCreateTime(DateTime.now());
//            bean.setUpdateTime(DateTime.now());
//            bean.setValid(1);
//            return baseMapper.insert(bean) == 1;
//        } else {
//            if(bean.getParentId() != null && bean.getParentId() > 0L){
//                Dept parentDept = baseMapper.selectById(bean.getParentId());
//                if(parentDept != null){
//                    bean.setAncestors(parentDept.getAncestors()+bean.getParentId()+",");
//                    bean.setParentName(parentDept.getName());
//                }
//            }
//            bean.setUpdateBy(manager.getUserId());
//            bean.setUpdateTime(DateTime.now());
//            bean.setValid(1);
//            return baseMapper.updateById(bean) == 1;
//        }
//    }
//
//    @Override
//    public Dept info(SysUser manager, Long id) {
//        return baseMapper.selectById(id);
//    }
//
//    @Override
//    public boolean delete(SysUser manager, Long id) {
//        int count = baseMapper.deleteById(id);
//        return count == 1;
//    }
//
//    /**
//     * 查询部门管理数据
//     *
//     * @param dept 部门信息
//     * @return 部门信息集合
//     */
//    @Override
//	public List<Dept> selectDeptList(Dept dept)
//    {
//        return baseMapper.selectDeptList(dept);
//    }
//
//    /**
//     * 构建前端所需要树结构
//     *
//     * @param depts 部门列表
//     * @return 树结构列表
//     */
//    @Override
//    public List<Dept> buildDeptTree(List<Dept> depts)
//    {
//        List<Dept> returnList = new ArrayList<Dept>();
//        List<Long> tempList = new ArrayList<Long>();
//        for (Dept dept : depts)
//        {
//            tempList.add(dept.getId());
//        }
//        for (Iterator<Dept> iterator = depts.iterator(); iterator.hasNext();)
//        {
//            Dept dept = (Dept) iterator.next();
//            // 如果是顶级节点, 遍历该父节点的所有子节点
//            if (!tempList.contains(dept.getParentId()))
//            {
//                recursionFn(depts, dept);
//                returnList.add(dept);
//            }
//        }
//        if (returnList.isEmpty())
//        {
//            returnList = depts;
//        }
//        return returnList;
//    }
//
//    /**
//     * 构建前端所需要下拉树结构
//     *
//     * @param depts 部门列表
//     * @return 下拉树结构列表
//     */
//    @Override
//    public List<AdminTreeSelect> buildDeptTreeSelect(List<Dept> depts)
//    {
//        List<Dept> deptTrees = buildDeptTree(depts);
//        return deptTrees.stream().map(AdminTreeSelect::new).collect(Collectors.toList());
//    }
//
//
//    @Override
//    public List<Long> selectDeptListByRoleId(Long roleId) {
//        return baseMapper.selectDeptListByRoleId(roleId);
//    }
//
//    /**
//     * 校验部门名称是否唯一
//     *
//     * @param dept 部门信息
//     * @return 结果
//     */
//    @Override
//    public String checkDeptNameUnique(Dept dept)
//    {
//        Long deptId = StringUtils.isNull(dept.getId()) ? -1L : dept.getId();
//        Dept info = baseMapper.checkDeptNameUnique(dept.getName(), dept.getParentId());
//        if (StringUtils.isNotNull(info) && info.getId().longValue() != deptId.longValue())
//        {
//            return UserConstants.NOT_UNIQUE;
//        }
//        return UserConstants.UNIQUE;
//    }
//
//    /**
//     * 根据ID查询所有子部门（正常状态）
//     *
//     * @param deptId 部门ID
//     * @return 子部门数
//     */
//    @Override
//    public int selectNormalChildrenDeptById(Long deptId)
//    {
//        return baseMapper.selectNormalChildrenDeptById(deptId);
//    }
//
//
//    /**
//     * 递归列表
//     */
//    private void recursionFn(List<Dept> list, Dept t)
//    {
//        // 得到子节点列表
//        List<Dept> childList = getChildList(list, t);
//        t.setChildren(childList);
//        for (Dept tChild : childList)
//        {
//            if (hasChild(list, tChild))
//            {
//                recursionFn(list, tChild);
//            }
//        }
//    }
//
//
//    /**
//     * 得到子节点列表
//     */
//    private List<Dept> getChildList(List<Dept> list, Dept t)
//    {
//        List<Dept> tlist = new ArrayList<Dept>();
//        Iterator<Dept> it = list.iterator();
//        while (it.hasNext())
//        {
//            Dept n = (Dept) it.next();
//            if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getId().longValue())
//            {
//                tlist.add(n);
//            }
//        }
//        return tlist;
//    }
//
//    /**
//     * 判断是否有子节点
//     */
//    private boolean hasChild(List<Dept> list, Dept t)
//    {
//        return getChildList(list, t).size() > 0 ? true : false;
//    }
//
//}
